package day12;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//b.使用newFixedThreadPool处理批量任务
//题目描述：编写一个程序，使用newFixedThreadPool创建一个固定大小的线程池来处理一批任务。
// 每个任务模拟一个耗时操作（例如，睡眠一段时间），并输出任务开始和结束的时间。要求：
//创建一个包含10个任务的列表，每个任务睡眠1-3秒之间的随机时间。
//使用固定大小为5的线程池来执行这些任务。
//输出每个任务的开始和结束时间，以及任务的总执行时间
public class Home2 {
    public static void main(String[] args) {
        //1.创建
        ExecutorService es= Executors.newFixedThreadPool(5);
        List<Runnable> list=new ArrayList<>();
        Random r=new Random();
        long start=System.currentTimeMillis();
        System.out.println("开始生成任务了...");
        for(int i=1;i<11;i++){
            int index=i;
            //2.执行
            es.execute(()->{
                String name=Thread.currentThread().getName();
                int sleep=r.nextInt(2000)+1000;
                try {
                    Thread.sleep(sleep);
                    System.out.println(name+"开始休眠"+sleep+"ms");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                long end=System.currentTimeMillis();
                System.out.println(name+"任务结束了"+index+"共耗时:"+(end-start)+"ms");
            });
        }
        //3.关闭
        es.shutdown();
        while (true){
            if(es.isTerminated()){
                long end1=System.currentTimeMillis();
                System.out.println("全部任务都已经完成了,共耗时:"+(end1-start)+"ms");
                break;
            }
        }
    }
}
